package fr.bludwarf.skywarrior.xml;

import fr.bludwarf.commons.xml.ElementXML;
import fr.bludwarf.commons.xml.exceptions.XMLLoadException;

/**
 * Element XML qui a besoin d'un objet père pour être converti en objet Java
 * @author MLAVIGNE
 *
 * @param <T>
 * @param <P>
 */
public abstract class SubElementXML<T, P> extends ElementXML<T>
{

	private P _parent;

	@Override
	@Deprecated
	public T toObject() throws Exception
	{
		if (_parent == null)
			throw new XMLLoadException(
				String.format(
					"Impossible d'appeler %1$s.toObject(), sans avoir indiqué son objet parent avant avec setParentObject(P parent) ou appeler directement toObject(P parent)", 
					getClass().getName()));
		return toObject(_parent);
	}
	
	public abstract T toObject(P parent) throws Exception;
	
	public P getParentObject()
	{
		return _parent;
	}
	
	public void setParentObject(P parent)
	{
		_parent = parent;
	}

}
